1. Technical Field of the Invention
Embodiments of the present invention relate to compilers and creation of optimized executable code.
2. Background Information
A compiler is a software program that takes a source file containing a program in a particular form, and converts the program to another form. In some cases, the compiler starts with a human-readable source code file (e.g. a program written in JAVA™ or C++) and converts or compiles to a binary file that may be directly executable or that may require interpretation or further compiling.
Compilers come in several varieties, such as static compilers (sometimes referred to as “ahead-in-time” compilers) or dynamic compilers (sometimes referred to as “just-in-time” compilers). Static compilers complete their work on the source file before the program is executed. Dynamic compilers, by contrast, compile the source file during execution of the program embodied in the source file. Both static and dynamic compilers also may perform optimization as part of the compiling processing, possibly to reduce execution time.
Static compilers perform some optimizations, such as inlining of methods, but in many cases optimization requires the knowledge of values of runtime parameters which are not known when static compiling is performed. Dynamic compilers thus have the advantage of having available the values of runtime parameters, and thus may make optimizations based on those parameters, but gain realized by optimization performed by dynamic compilers is offset by the fact the compiler too is running and sharing time on the processor, thus slowing the overall execution of the application program.